Добрый день! Проблема следующая - осуществляю загрузку изображений на сайте пользователем. Само собой для загружаемого элемента существуют некоторые ограничения - расширение файла, вес, размер. Хочу сделать что бы посетитель видел отчет по каждой из причин если они возникли, то есть "Недопустимый тип"файла, "Превышен максимальный размер" и т.д.
Форма выглядит таким образом:
<form id="feeds" method="post" action="<?php echo base_url(); ?>feeds/add_feeds" enctype="multipart/form-data">
<input type="text" placeholder="Заголовок статьи" name="title" />
<input type="text" placeholder="Ключ статьи" name="key_n" />
<textarea placeholder="Текс статьи" name="txt" rows="10"></textarea>
<input type="file" name="userfile" />
<button type="submit" class="button--8">ОПУБЛИКОВАТЬ</button>
</form>
Сервер:
function add_feeds() {
$config['upload_path'] = './library/img/news/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$config['encrypt_name'] = TRUE;
$config['remove_spaces'] = TRUE;
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload()){
$error = array('error' => $this->upload->display_errors());
$this->load->view('pages/feeds/index', $error);
}else{
$image_data = $this->upload->data();
$feeds['title'] = $_POST['title'];
$feeds['txt'] = $_POST['txt'];
$feeds['key_n'] = $_POST['key_n'];
$feeds['img'] = $image_data['file_name'];
$this->main_model->new_feeds($feeds);
echo json_encode($feeds);
}
}
Сервер написан на php-фреймворке Codignaiter, обработка и отображение ошибок происходит вот в этой части кода:
if ( ! $this->upload->do_upload()){
$error = array('error' => $this->upload->display_errors());
$this->load->view('pages/feeds/index', $error);
}
Для того что бы ошибка отображалась на страницу добавляю вот это:
<?php if (isset($error)) {?>
<?php echo $error;?>
<?php }?>
И если на форму не вешать аякс, что бы отправка на сервер происходила обновлением страницы, то вывод ошибок будет работать, а вот если повесить аякс, то нет...
Конечно, в скрипте можно вывести какой-то allert с ошибкой типа "Что-то пошло не так", но это не совсем то что я хочу, обработчтк выглядит так:
$("form#feeds").submit(function(e){
e.preventDefault();
var f = this,
form = new FormData(this),
s = $(f.elements).last(),
e = s.end().slice(0, -2).removeClass('input-error').filter(function() {
return !$.trim(this.value)
});
if(e.length) e.addClass('input-error');
else {
s.prop('disabled', 1);
s.end().not(s);
$.ajax({
url: f.action,
type: 'POST',
data: form,
contentType: false,
processData: false,
cache: false,
dataType: 'json',
success: function(data) {
f.reset();
s.prop('disabled', 0);
e.removeClass('input-error');
$("#content").load("feeds #content");
},
error: function() {
// здесь вывести ошибку
}
});
}
});
Я догадываюсь что мне каким-то образом нужно вывести вот это:
<?php if (isset($error)) {?>
<?php echo $error;?>
<?php }?>
здесь:
error: function() {
// здесь вывести ошибку
}
Но, как это сделать я не понимаю, и не могу найти адекватного ответа в интернете, прошу помочь, словом или делом))